iT邦幫忙

2023 iThome 鐵人賽

DAY 2
1

This series of tutorials is aimed to share the notes taken while I was learning python for cybersecurity with the book - Black Hat Python.
這系列教學文章為學習筆記+延伸資源,旨在分享學習書籍 Black Hat Python時所思所學,也希望能幫助想了解Python和資安的大大們入門。

This tutorial has also been written in English in Medium.

目錄

  • Netcat IV
  • 跑Netcat

看文前, 你應該要具備以下基礎能力:


Let's get started! 開始吧!


Netcat IV

這個方法是用來表現上傳檔案、執行指令或創建一個有互動性的使用者介面(interactive user interface.)。

完整程式碼

def handle(self, client_socket):
        if self.args.execute:
            output = execute(self.args.execute)
            client_socket.send(output.encode())

        elif self.args.upload:
            file_buffer = b''
            while True:
                data = client_socket.recv(4096)
                if data:
                    file_buffer += data
                    print(len(file_buffer))
                else:
                    break
            
            with open(self.args.upload, 'wb') as f:
                f.write(file_buffer)
            message = f'Saved file {self.args.upload}'
            client_socket.send(message.encode())

        elif self.args.command:
            cmd_buffer = b''
            while True:
                try:
                    client_socket.send(b' #> ')
                    while '\n' not in cmd_buffer.decode():
                        cmd_buffer += client_socket.recv(64)
                    response = execute(cmd_buffer.decode())
                    if response:
                        client_socket.send(response.encode())
                    cmd_buffer = b''
                except Exception as e:
                    print(f'server killed {e}')
                    self.socket.close()
                    sys.exit()

If 一個指令應該被執行,方法handle 傳送(pass)了指令到執行的函式,並傳送(send) output結果回到socket

上傳檔案

elif self.args.upload:
    file_buffer = b''
    while True:
        data = client_socket.recv(4096)
        if data:
            file_buffer += data
            print(len(file_buffer))
        else:
            break

設定一個迴圈:

  • 去聆聽正在聆聽的scoket(on the listening socket )的內容
  • 接收檔案
    直到沒有任何檔案進來。

If shell被創建出來了…

elif self.args.command:
            cmd_buffer = b''
            while True:
                try:
                    client_socket.send(b' #> ')
                    while '\n' not in cmd_buffer.decode():
                        cmd_buffer += client_socket.recv(64)
                    response = execute(cmd_buffer.decode())
                    if response:
                        client_socket.send(response.encode())
                    cmd_buffer = b''
                except Exception as e:
                    print(f'server killed {e}')
                    self.socket.close()
                    sys.exit()
  • 設置一個迴圈,並傳送提示(prompt)到sender,等待指令字串回來
  • The shell 掃描newline字元(character),以便決定何時開始處理一個指令
    這些讓netcat變得更加親民好用。

跑Netcat

1.

python netcat.py -t 127.0.0.1 -p 1234 -l -c

2.

打開Root Terminal Emulator

nc 127.0.0.1 1234

現在能輕易辦到許多事了...


總結

You can use this program on the listener side and use netcat itself on the sender side. Hopefully, you have seen how powerful it is.
你能使用這個程式在聆聽端,或使用netcat再傳送端。希望這系列能讓你認識到它的強大之處。


Reference參考資料

推薦影片
絕讚! Youtube 教學影片 | Elevate Cyber

原始碼
Github - Python For Cybersecurity | Monles


上一篇
Day 08 - Netcat III
下一篇
Day 10 - Proxy I. 說明和步驟分解
系列文
為駭而生 - Python 18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言